import re

ACTION_EXPLAIN_DICT = {
    '提问描述具体事例': '咨询师询问来访者具体发什么事情',
    '提问来访者想先谈论哪个话题': '当来访者说了很多件事时，咨询师询问来访者想先谈论哪一件事情',
    '提问来访者对某事例将采取的做法': '咨询师询问来访者将来会怎么做',
    '提问来访者对某事例的想法': '咨询师询问来访者对某件事情的想法/看法',
    '提问当下的事例对来访者的影响': '咨询师询问来访者某件事情对来访者有什么影响',
    '提问来访者对某事例的感受': '发生了某件事情后，咨询师询问来访者发生这件事情后的感受是什么',
    '提问身边资源有哪些': '咨询师询问来访者身边有谁可以帮助ta',
    '提问自身优势有哪些': '咨询师询问来访者有什么优势、成功经验等，可以帮助来访者解决当下所面临的问题',
    '提问某想法对来访者的影响': '咨询师询问来访者的某些想法对来访者造成的影响',
    '提问来访者当下的情绪/感受': '咨询师询问来访者现在的感受或情绪是什么',
    '提问来访者的期待': '咨询师询问来访者想要的是什么，期待是什么',
    '提问情绪的原因': '咨询师询问来访者是什么让来访者有了该情绪',
    '提问那我们可以一起探索一下。可以和我说说你最近的生活吗？': '当来访者不知道说什么的时候，咨询师询问来访者最近的生活如何',
    '提问如果ta做出改变的话，来访者会有什么不同': '当来访者期望他人做出改变的时候，咨询师询问来访者如果ta做出了改变，来访者会有什么变化',
    '追问还有吗': '咨询师对来访者保持好奇，通过“还有吗”让来访者多说一些自己的情况',
    '追问模糊信息': '咨询师对来访者上一轮输入中的模糊信息进行追问',
    '总结或重复': '咨询师总结或者重复来访者说的话',
    '提供思路、心理作业': '咨询师为来访者提供解决办法的思路，或者给来访者布置有助于解决问题的任务',
    '确认主题': '咨询师和来访者确认接下来要谈论的主题是什么',
    '引导回话题': '当来访者跑题后，咨询师把话题拉回主题',
    '提问来访者需要什么帮助': '咨询师询问来访者需要什么帮助',
    '结束语': '当来访者话要结束对话时，咨询师说的一些结束语',
    '自然对话': '`自然对话`是咨询师紧扣上一轮来访者的对话进行积极、正向的回应，比如总结、共情、鼓励、赞美等。',
    '提问对来访者来说满分是什么样的': '`提问对来访者来说满分是什么样的`是咨询师询问来访者心目中的理想状态是什么样的，引导来访者说出自己所想要的是什么，或所期望的是什么。',
    '提示如果存在安全风险，请联系线下相关机构或组织。保护自身及他人人身财产安全': '当来访者有自杀、自残、想死、杀人、受到严重的伤害等安全风险时，提醒来访者及时寻找线下相关机构或组织的帮助。',
    '解释、分析': '当来访者不满或质疑咨询师的回复时，咨询师根据上文的对话内容，对自己的回复内容进行解释；当来访者想要咨询师帮忙分析某件事情的原因或询问咨询师心理相关的知识时，咨询师对来访者的问题进行分析。',
    '赞美': '当咨询师发现来访者的优点、或者来访者有值得夸奖的地方时，夸赞来访者。',
    '鼓励': '当咨询师发现来访者做的不错、或者有不错的想法时，鼓励来访者多去做可以做到的事情或多采用不错的想法。',
    '结果问句': '`结果问句`是焦点解决短期治疗咨询开场阶段常会使用的技巧，以理解来访者的谈话动机与期待，并引导来访者向正向、未来及问题解决方向开展谈话。',
    '量尺问句': '`量尺问句1`是用1分到10分，让来访者将自己的愿望、感受、态度、动机与想法等抽象的概念转化为可具体掌握的阶段和步骤，以帮助来访者自我澄清，以及表达与接纳难以言喻的内心状态与目标，也可用来协助他评估自身已经拥有的资源、改变的进展等1分代表最糟糕的情况，10分代表最好的情况。',
    '应对问句': '`应对问句`是询问来访者一些很小的、被视为理所当然的行动与动力是从何而来的，特别是来访者针对目前困境所做的行动。',
    '关系问句': '`关系问句`是通过来访者的重要他人、未来的来访者等他人的视角，让来访者意识到不同人对同一件事情会有不同的看法和应对方式，同时让来访者感受到社会关系支持的力量。',
    '例外问句': '`例外问句1`是引导来访者去看到问题不发生或比较不严重的时刻，并探讨这些时刻是如何发生的，以开发过去成功的解决方法，进而判断可否运用于现在。',
    '奇迹问句': '`奇迹问句`是让来访者感受到希望，同时也能让来访者从谈论问题转向思考解决方法。',
    '一般化': '`一般化`是与特殊化相反，让来访者意识到自己所面临的问题，并非只有自己会遇到，其他人也会有同样的烦恼，以达到安慰来访者、与来访者建立咨询关系的目的。',
    '安全岛': '`安全岛技术`是咨询师为来访者营造一个安全、舒适、放松的空间，让来访者能够信任咨询师，更好地进行谈话。',
    '反馈': '`反馈`是咨询师对来访者上一句所说的内容发表自己的感受和想法，做到同理、共情来访者，不批判、评价来访者。',
    # 新的动作
    '以`假如问句`的方式进行提问': '邀请来访者设想在其想要的未来实现时，其可能出现的积极想法、行动、人际互动等',
    '以`差异问句`的方式进行提问': '邀请来访者思考“当下与成功经验之间有何不同”、“当下与想要的未来之间有何不同” ，从而及找到有效的行动策略',
    '提问来访者做某件事的理由': '咨询师询问来访者做某件事的理由是什么',
    '提问来访者对某人物的看法/评价': '咨询师询问来访者对某人的看法或者评价是什么',
    '提问来访者的行为/反应': '咨询师询问来访者的行为或者反应是什么',
    '提问历史': '咨询师询问来访者关于某件事的历史，比如什么时候开始、持续了多久，等等',
    '提问表现': '咨询师询问来访者某件事的表现，比如抑郁、焦虑的具体症状是什么，等等',
    '提问关系': '咨询师询问来访者人和人之间相互交往产生的问题及影响',
    '使用关键词': '来访者使用的语言传达出其基本观点，咨询师使用来访者反复使用的词语来建构问句或回应',
    '确认': '咨询师向来访者再次回述其表达的内容，并向其发出询问，就自己的理解准确无误获得来访者同意',
    '语意重复': '咨询师简化来访者话中的核心，重述某个或某些要点，以邀请来访者对此做进一步的阐述和拓展',
    '重构': '咨询师用正向语言或观点来重新看待、诠释来访者的问题，对事件重新赋予新的正向意义。',
    '温和面质': '当遇到来访者说话内容或态度出现矛盾时（如前后表述不一致、信念与行为之间不一致等），咨询师用好奇的（而不是批评或质问的）态度去询问矛盾的因由，促发来访者思考',
    '达成一致性理解': '是咨访双方互相协调的系列动作：发言者先发出信息，然后倾听者反馈自己的理解，之后发言者对反馈进行确认或纠正。双方通过这个过程建立理解基础',
    '比喻': '比喻是通过把一种事物看成另一种事物而认识了它。也就是说找到甲事物和乙事物的共同点，发现甲事物暗含在乙事物身上不为人所熟知的特征，而对甲事物有一个不同于往常的重新的认识',
    '隐喻': '用另一种事物/一个故事暗喻当下的事件或情形，促发来访者的自我觉察和对自身处境的思考'
}

ACTION_NAME_LIST = list(ACTION_EXPLAIN_DICT.keys())

NO_REPEAT_ACTIONS = [
    '以`结果问句`的方式进行提问',
    '以`量尺问句`的方式进行提问',
    '以`应对问句`的方式进行提问',
    '以`关系问句`的方式进行提问',
    '以`例外问句`的方式进行提问',
    '以`奇迹问句`的方式进行提问',
    '提问描述具体事例',
    '提问来访者对某事例将采取的做法',
    '提问来访者对某事例的感受',
    '提问身边资源有哪些',
    '提问自身优势有哪些'
]


def extract_explanation(action_name):
    match_ = re.search(f"({'|'.join(ACTION_NAME_LIST)})", action_name)
    if match_:
        return ACTION_EXPLAIN_DICT[match_.group()]

    else:
        return ''
